<!DOCTYPE html>
<!--
     SPDX-License-Identifier: CC-BY-SA-4.0
     SPDX-FileCopyrightText: 2020 seL4 Project a Series of LF Projects, LLC.
-->
<!-- Page last generated 2025-02-20 03:16:15 +0000 -->
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>seL4webserver reference application | seL4 docs</title>

    <!-- Our stylesheet and theme stylesheet.  Contains bootstrap. -->
    <link rel="stylesheet" href="/assets/css/style.css" type="text/css">
    <!-- Font awesome -->
    <link href="https://use.fontawesome.com/releases/v5.0.8/css/all.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
    <!-- Pygments syntax highlighting  -->
    <link rel="stylesheet" href="/assets/css/highlighting/trac.css" type="text/css">
    <link rel="icon" type="image/x-icon" href="/assets/favicon.ico"><script defer data-domain="docs.sel4.systems"
	    src="https://analytics.sel4.systems/js/script.js"></script></head>

  <body class="container-fluid">

    



<header>
  <ul class="row menu">
    <li class="col-xs-12 col-md-2" >
            <a href="https://sel4.systems" class="skip-icon">
              <img class="img-responsive" src="/assets/logo-text-white.svg" alt="seL4 logo" />
            </a>
    </li>
    <li class="col-xs-12 col-md-10 menu">
      <nav aria-label="Banner links">
        <h2><a href="/Resources" />Resources</h2>
        <h2><a href="/processes" />Contributing</a></h2>
        <h2><a href="/projects" />Projects</h2>
        <h2><a href="/Tutorials" />Tutorials</h2>
        <iframe title="DuckDuckGo search bar" src="https://duckduckgo.com/search.html?site=docs.sel4.systems&prefill=Search%20sel4.systems" style="overflow:hidden;margin-bottom:10px; padding:0;height:40px;float:right;border-width: 0px"></iframe>
      </nav>
    </li>
  </ul>
  <div class="clear"></div>
  
<div class="breadcrumbs bootstrap hidden-sm-down">
  <nav class="sel-breadcrumb" aria-label="Breadcrumb" >
    <ol class=" list-unstyled" vocab="http://schema.org/" typeof="BreadcrumbList">
      
      
        

        

        <li class="breadcrumb-item" property="itemListElement" typeof="ListItem">
            <a property="item" typeof="WebPage" href="/">
              <span property="name"><b>seL4 Docs</b></span>
            </a>
            <meta property="position" content="1" />
        </li>
      
        

        

        <li class="breadcrumb-item" property="itemListElement" typeof="ListItem">
            <a property="item" typeof="WebPage" href="/projects/">
              <span property="name"><b>Projects</b></span>
            </a>
            <meta property="position" content="2" />
        </li>
      
        

        
          <li class="breadcrumb-item" property="itemListElement" typeof="ListItem">
            <span property="name">seL4webserver reference application</span>
            <meta property="position" content="3" /></li>
          
    </ol>
  </nav>
  <nav class="sel-version" aria-label="Current Versions">
    <ol class="list-unstyled">
      <li class="list-unstyled text-right" style="margin-left:auto; padding:0rem 0rem;">
        Current versions:</li>
      <li class="list-unstyled text-right">
      <a href="/releases/sel4/13.0.0"><b>seL4-13.0.0</b></a></li>
      <li class="list-unstyled text-right">
      <a href="/releases/microkit/1.4.1"><b>microkit-1.4.1</b></a></li>
      <li class="list-unstyled text-right">
      <a href="/releases/camkes/camkes-3.11.0"><b>camkes-3.11.0</b></a></li>
      <li class="list-unstyled text-right">
      <a href="/releases/capdl/0.3.0"><b>capDL-0.3.0</b></a></li>
      </ol>
  </nav>
  <div class='clear'></div>
</div>


</header>

    <main>
      <div class="row">
  <div class="hidden-xs col-sm-4 col-md-3 col-lg-2">
    


<div class="sidebar">















    <ul class="nav nav-sidebar">
  
    
    

    
        <li class="">
            <a class="" href="/projects/sel4/">seL4</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/l4v/">L4.verified</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/camkes/">CAmkES</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/capdl/">CapDL</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/elfloader/">Elfloader</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/buildsystem/">seL4 Buildsystem</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/user_libs/">user_libs</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/sel4runtime/">The seL4 run-time</a>
        </li>
  
    
    

    
        <li class="active">
            <a class="" href="/projects/sel4webserver/">seL4webserver</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/sel4-tutorials/">seL4 tutorials</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/sel4bench/">sel4bench</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/sel4test/">seL4Test</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/virtualization/">Virtualization</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/camkes-vm/">camkes-vm</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/dockerfiles/">Dockerfiles</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/docsite/">seL4 Documentation website</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/sel4_tools/">seL4_tools</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/microkit/">Microkit</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/hardware_hacks/">Hardware Hacks</a>
        </li>
  
    
    

    
        <li class="">
            <a class="" href="/projects/rust/">Rust</a>
        </li>
  
    </ul>


</div>

  </div>
  <div class="content col-sm-8 col-md-6 col-lg-7 main">
    
<!--
     Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)

     SPDX-License-Identifier: CC-BY-SA-4.0
-->

<h1 id="sel4webserver-reference-application">seL4webserver reference application</h1>

<p>This project contains an seL4 webserver application.  Its purpose is to be a reference for
implementing applications on seL4. Currently there is only a single configuration that runs
a webserver inside a Linux VM component to serve a static website.</p>

<h2 id="current-status">Current status</h2>

<p>Currently there are two configurations for serving a static website from a webserver running
inside a Linux guest on an <a href="https://wiki.odroid.com/odroid-xu4/odroid-xu4">odroid-xu4</a> on a local network. This includes a configuration
with a single VM instance that serves a static website. The second configuration involves
multiple VM’s serving a static website. The multiple VM configuration has an additional VM that acts
as an network access point for the other VMs.
It would be possible to modify which static website is being served by modifying the static html files located in <code class="language-plaintext highlighter-rouge">/run/site/</code>
in the Linux guest’s file system.
If you don’t have <a href="https://wiki.odroid.com/odroid-xu4/odroid-xu4">odroid-xu4</a> to test this project you still can use emulation. Please see “Configure: Single VM Webserver (qemu-arm-virt)”. Notice: check “Configure networking (qemu-arm-virt)” to learn more about this topic”.</p>

<h2 id="plans">Plans</h2>

<p>The purpose of this project is to build up a set of reference artifacts and system configurations
that leverage seL4’s isolation guarantees and different board support packages.  Currently
everything is run inside a single camkes component and therefore doesn’t isolate different components.
The next steps are to increase the amount of platforms that this app targets and to pull functionality
out into separate isolated components. We also want to have an idea of performance characteristics for
this system.  Longer term steps involve constructing more complicated systems that have a network
access point but also have functions that need to be strongly isolated in a secure way.</p>

<h3 id="short-term">Short-term</h3>

<ul>
  <li>Native application not involving Linux-VM</li>
  <li>Additional platforms</li>
  <li>Performance analysis/optimisation</li>
</ul>

<h3 id="long-term">Long-term</h3>

<ul>
  <li>More complex system design</li>
</ul>

<h2 id="setup">Setup</h2>

<p>This project is based on an Arm VMM running inside a camkes system and therefore requires all of the
Camkes dependencies described in <a href="/projects/buildsystem/host-dependencies.html">Host Dependencies</a>.</p>

<p>Additional dependencies required to run a lighttpd webserver serving docs.sel4.systems in a Linux guest:</p>

<ul>
  <li><a href="https://github.com/seL4/docs/blob/master/tools/Dockerfile">docsite dependencies</a>: Dependencies required to build docs.sel4.systems.</li>
  <li>libpcre3-dev:armel</li>
  <li>zlib compression library, armel arch: Required for building lighttpd (debian package: zlib1g-dev:armel)</li>
  <li>pcre regex library, armel arch: Required for building lighttpd (debian package: libpcre3-dev:armel)</li>
  <li>arm user binary emulation via qemu: Required for building lighttpd (debian package: qemu-user</li>
</ul>

<h3 id="build-instructions">Build instructions</h3>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># After initialising a fresh directory</span>

<span class="c"># Obtain sources via repo tool</span>
repo init <span class="nt">-u</span> https://github.com/seL4/sel4webserver-manifest.git
repo <span class="nb">sync</span>
</code></pre></div></div>

<h4 id="configure-single-vm-webserver">Configure: Single VM Webserver</h4>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Initalise project build directory</span>
<span class="nb">mkdir </span>build
<span class="nb">cd </span>build
../init-build.sh
<span class="c"># -- Configuring done</span>
<span class="c"># -- Generating done</span>
<span class="c"># -- Build files have been written to: /tmp/tmp.xmwD2Fc3FW/buildweb</span>
</code></pre></div></div>

<h4 id="configure-multi-vm-webserver">Configure: Multi-VM Webserver</h4>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Initalise project build directory</span>
<span class="nb">mkdir </span>build
<span class="nb">cd </span>build
../init-build.sh <span class="nt">-DMULTI_VM_LAN</span><span class="o">=</span>1
<span class="c"># -- Configuring done</span>
<span class="c"># -- Generating done</span>
<span class="c"># -- Build files have been written to: /tmp/tmp.xmwD2Fc3FW/buildweb</span>
</code></pre></div></div>

<h4 id="build-webserver">Build Webserver</h4>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># build</span>
ninja
<span class="c"># [0/1] Re-running CMake...</span>
<span class="c"># -- Configuring done</span>
<span class="c"># -- Generating done</span>
<span class="c"># -- Build files have been written to: /tmp/tmp.xmwD2Fc3FW/buildweb</span>
<span class="c"># [59/385] Performing CAmkES generation for 15 files</span>
<span class="c"># ...</span>
<span class="c"># [385/385] Generating images/capdl-loader-image-arm-exynos5</span>

<span class="c"># Resulting artifacts:</span>
<span class="nb">ls </span>images
<span class="c"># capdl-loader-image-arm-exynos5</span>
</code></pre></div></div>

<p>See the <a href="/Hardware/OdroidXU4.html">Odroid XU4 hardware page</a> on the docsite
for additional information about running an seL4 image on an Odroid XU4.</p>

<p>Running the generated seL4webserver image will result in a running webserver listening on port 3000.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>udhcpc: started, v1.27.2
[   10.485099] random: mktemp: uninitialized urandom read (6 bytes read)
udhcpc: sending [   10.504865] r8152 6-1:1.0 eth0: carrier on
discover
udhcpc: sending select for 10.13.1.7
udhcpc: lease of 10.13.1.7 obtained, lease time 3600
deleting routers
[   11.548877] random: mktemp: uninitialized urandom read (6 bytes read)
adding dns 10.13.0.8
adding dns 10.13.0.9

Welcome to Buildroot
buildroot login:

</code></pre></div></div>

<p>You could then navigate to 10.13.1.7:3000 in a web browser on the same local network.</p>

<h4 id="configure-single-vm-webserver-qemu-arm-virt">Configure: Single VM Webserver (qemu-arm-virt)</h4>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#Initialise project build directory</span>
<span class="nb">mkdir </span>build
<span class="nb">cd </span>build
../init-build.sh <span class="nt">-DPLATFORM</span><span class="o">=</span>qemu-arm-virt
<span class="c">#...</span>
<span class="c">#Warning: no cpu specified for virt board, fallback on cortex-a53</span>
<span class="c">#...</span>
<span class="c">#-- Configuring done</span>
<span class="c">#-- Generating done</span>
<span class="c">#-- Build files have been written to: /home/hugo/seL4/sel4webserver/build</span>
</code></pre></div></div>

<h4 id="build-webserver-qemu-arm-virt">Build Webserver (qemu-arm-virt)</h4>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># build</span>
ninja
<span class="c"># [13/443] Performing configure step for 'cgi-load-file'</span>
<span class="c"># -- The C compiler identification is GNU 9.3.0</span>
<span class="c"># ...</span>
<span class="c"># This step will take some time, be patient...</span>
<span class="c"># [358/443] Completed 'docsite'</span>
<span class="c"># ...</span>
<span class="c"># [443/443] Generating images/capdl-loader-image-arm-qemu-arm-virt</span>

<span class="c"># Resulting artifacts:</span>
<span class="nb">ls </span>images
<span class="c"># capdl-loader-image-arm-qemu-arm-virt</span>
</code></pre></div></div>

<h4 id="running-sel4-qemu-arm-virt-image">Running seL4 qemu-arm-virt image</h4>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./simulate
<span class="c"># ./simulate: qemu-system-aarch64 -machine virt,virtualization=on,highmem=off,secure=off -cpu cortex-a53 -nographic  -m size=2048  -kernel images/capdl-loader-image-arm-qemu-arm-virt</span>
<span class="c"># ELF-loader started on CPU: ARM Ltd. Cortex-A53 r0p4</span>
<span class="c"># ...</span>
<span class="c"># Bootstrapping kernel</span>
<span class="c"># Warning: Could not infer GIC interrupt target ID, assuming 0.</span>
<span class="c"># Booting all finished, dropped to user space</span>
<span class="c"># &lt;&lt;seL4(CPU 0) [decodeUntypedInvocation/205 T0xff80bf817400 "rootserver" @4006f8]: Untyped Retype: Insufficient memory (1 * 2097152 bytes needed, 0 bytes available).&gt;&gt;</span>
<span class="c"># Loading Linux: 'linux' dtb: 'linux-dtb'</span>
<span class="c"># ...</span>
<span class="c"># [    0.000000] Booting Linux on physical CPU 0x0</span>
<span class="c"># [    0.000000] Linux version 4.9.189+ (alisonf@shinyu-un) (gcc version 6.3.0 20170516 (Debian 6.3.0-18) ) #16 SMP Tue Feb 25 14:14:50 AEDT 2020</span>
<span class="c"># [    0.000000] Boot CPU: AArch64 Processor [410fd034]</span>
<span class="c"># ...</span>
<span class="c"># Starting network: OK</span>
<span class="c"># [    6.538957] connection: loading out-of-tree module taints kernel.</span>
<span class="c"># [    6.579046] Event Bar (dev-0) initalised</span>
<span class="c"># [    6.620310] 2 Dataports (dev-0) initalised</span>
<span class="c"># ifconfig: SIOCGIFFLAGS: No such device</span>
<span class="c"># udhcpc: SIOCGIFINDEX: No such device</span>
<span class="c">#</span>
<span class="c"># Welcome to Buildroot</span>
<span class="c"># buildroot login:</span>

</code></pre></div></div>

<h2 id="configure-networking-qemu-arm-virt">Configure networking (qemu-arm-virt)</h2>

<p>Networking under qemu may be somewhat tricky and specific configuration details may vary depending on the host configuration/distro/etc. Thus here there are some few suggestions to try having your set up ready as easy as possible.
So, if you want to have networking on your virtualized guest then you can try:</p>

<p>1st- Configure a dhcp server on the host.
2nd- Run “simulate” like this:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo</span> ./simulate <span class="nt">--extra-qemu-args</span><span class="o">=</span><span class="s2">"-netdev tap,id=mynet0,ifname=tap0,script=no,downscript=no -device virtio-net,netdev=mynet0,mac=52:55:00:d1:55:01,disable-modern=on,disable-legacy=off"</span>
</code></pre></div></div>

<p>3rd- Manually create the bridge interface to connect the guest and the host networking. Again, here specific commands’ syntax depends on every environment. Just as an example here what worked on Ubuntu 20.04:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>brctl addif virbr0 eno1
<span class="nb">sudo </span>brctl addif virbr0 tap0
<span class="nb">sudo </span>ifconfig tap0 up
<span class="nb">sudo </span>ifconfig virbr0 up
<span class="nb">sudo </span>ifconfig eno1 up
brctl show
</code></pre></div></div>

<p>Anyway, probably you will need to check the documentation of your specific host distro and qemu version to see how a bridge can be created in your specific setup.
It is well known that on some deployments qemu scripts automatically takes cares of this so you will be able to skip this last step.</p>

<p>Thus if everything goes as desired you should see udhcpc getting networking config, that is, something like this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Starting network: OK
[    6.431947] connection: loading out-of-tree module taints kernel.
[    6.469091] Event Bar (dev-0) initalised
[    6.492662] 2 Dataports (dev-0) initalised
udhcpc: started, v1.31.0
[   16.026150] random: mktemp: uninitialized urandom read (6 bytes read)
udhcpc: sending discover
udhcpc: sending select for 192.168.122.100
udhcpc: lease of 192.168.122.100 obtained, lease time 600
[   17.503524] random: mktemp: uninitialized urandom read (6 bytes read)
adding dns 8.8.8.8
adding dns 8.8.4.4

Welcome to Buildroot
buildroot login:
</code></pre></div></div>

<h2 id="testing-the-web-server-qemu-arm-virt">Testing the web server (qemu-arm-virt)</h2>

<p>Once the networking has been set up, you can check what IP has been assigned to your guest (also it is announced on the screen via udhcpc message…):</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>udhcpc: sending select for 192.168.122.100
udhcpc: lease of 192.168.122.100 obtained, lease time 600
[   17.503524] random: mktemp: uninitialized urandom read (6 bytes read)
adding dns 8.8.8.8
adding dns 8.8.4.4

Welcome to Buildroot
buildroot login: root
# ifconfig
eth0      Link encap:Ethernet  HWaddr 52:55:00:D1:55:01
          inet addr:192.168.122.100  Bcast:192.168.122.255  Mask:255.255.255.0
(...)
</code></pre></div></div>

<p>and now just open web browser and open URL: <code class="language-plaintext highlighter-rouge">http://&lt;your_assigned_IP&gt;:3000</code> and you should see an seL4 documentation web page.</p>

<h2 id="contributing">Contributing</h2>

<p>Contributions are welcome in the form of feature requests, documentation requests, or documentation/code contributions.
See <a href=".github/CONTRIBUTING.md">CONTRIBUTING.md</a> for our general contribution guidelines.</p>

<p>Current code contributions we would be interested to receive:</p>

<ul>
  <li>Additional platforms</li>
  <li>Additional VM modules</li>
  <li>Performance analysis</li>
</ul>

<p><em>File included from <a href="https://github.com/sel4proj/sel4webserver/blob/master/README.md">github repo</a> <a href="https://github.com/sel4proj/sel4webserver/edit/master/README.md">edit</a></em></p>


  </div>







  
    
<div class="sidebar-toc hidden-xs hidden-sm col-md-3 col-lg-3">
    <ul id="toc" class="section-nav">
<li class="toc-entry toc-h2"><a href="#current-status">Current status</a></li>
<li class="toc-entry toc-h2"><a href="#plans">Plans</a>
<ul>
<li class="toc-entry toc-h3"><a href="#short-term">Short-term</a></li>
<li class="toc-entry toc-h3"><a href="#long-term">Long-term</a></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#setup">Setup</a>
<ul>
<li class="toc-entry toc-h3"><a href="#build-instructions">Build instructions</a>
<ul>
<li class="toc-entry toc-h4"><a href="#configure-single-vm-webserver">Configure: Single VM Webserver</a></li>
<li class="toc-entry toc-h4"><a href="#configure-multi-vm-webserver">Configure: Multi-VM Webserver</a></li>
<li class="toc-entry toc-h4"><a href="#build-webserver">Build Webserver</a></li>
<li class="toc-entry toc-h4"><a href="#configure-single-vm-webserver-qemu-arm-virt">Configure: Single VM Webserver (qemu-arm-virt)</a></li>
<li class="toc-entry toc-h4"><a href="#build-webserver-qemu-arm-virt">Build Webserver (qemu-arm-virt)</a></li>
<li class="toc-entry toc-h4"><a href="#running-sel4-qemu-arm-virt-image">Running seL4 qemu-arm-virt image</a></li>
</ul>
</li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#configure-networking-qemu-arm-virt">Configure networking (qemu-arm-virt)</a></li>
<li class="toc-entry toc-h2"><a href="#testing-the-web-server-qemu-arm-virt">Testing the web server (qemu-arm-virt)</a></li>
<li class="toc-entry toc-h2"><a href="#contributing">Contributing</a></li>
</ul>
</div>

  
  
<div class="sidebar-toc hidden-xs hidden-sm col-md-3 col-lg-3">
  
    <ul class="section-nav">
    	<h2> seL4webserver </h2> 
        <li>
          
          <a style=" font-weight: bold; " class="" href="/projects/sel4webserver/">
            Documentation homepage
          </a>
        </li>

















    
        <h3>Repositories</h3>
    
        <li>
          <a class="" href="https://github.com/seL4proj/sel4webserver">
            sel4webserver
          </a>
        </li>

    
        <li>
          <a class="" href="https://github.com/seL4proj/sel4webserver-manifest">
            sel4webserver-manifest
          </a>
        </li>









  







    
        <h3>Recent Updates</h3>
    
        <li>
          <a style="" href="/updates/sel4webserver/camkes-3.8.x.html">
            camkes-3.8.x-compatible
          </a>
        </li>

    </ul>

</div>


</div>

    </main>
    


<footer class="site-footer">

  <h2 class="footer-heading">seL4 docs</h2>

  <div class="footer-col-wrapper">

    <div class="col-md-2">
      



<ul class="social-media-list">
  <li><a href="https://github.com/sel4"><i class="fab fa-github"></i> <span class="username">sel4</span></a></li><li><a href="https://github.com/sel4proj"><i class="fab fa-github"></i> <span class="username">sel4proj</span></a></li>
</ul>

    </div>

    <div class="col-md-8">
      <ul class="list-unstyled">
        <li>
          This site is for displaying seL4 related documentation.  Pull requests are welcome.
        </li>
        
          <li>
            Site last updated: Fri Feb 7 10:17:38 2025 +1100 ee78c8857c
          </li>
          <li>
                Page last updated: Mon Nov 30 09:25:37 2020 +1100 977ed44f17
          </li>
        
      </ul>
    </div>
    <div class="col-md-2">
<a href="https://github.com/seL4/docs/blob/master/projects/sel4webserver/index.md">View page on GitHub</a>
      <br />
      <a href="https://github.com/seL4/docs/edit/master/projects/sel4webserver/index.md">Edit page on GitHub</a>
      <br />
      <a href="/sitemap">Sitemap</a>
    </div>

  </div>

</footer>

  </body>
</html>
